/*
 * util.c
 *
 * $Revision: 1.3 $
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include "decl.h"

#define PATH_SEP	'/'
#ifdef MSDOS
#define PATH_SEP2	'\\'
#define PATH_SEP3	':'
#define PATH_EXT	'.'
#endif

/****************************************
  文字列を大文字に
****************************************/
char *
my_strupr(char *str)
{
    char *p = str;

    while (*p) {
	if (islower(*p)) {
	    *p = toupper(*p);
	}
	p++;
    }
    return str;
}

/****************************************
  文字列を小文字に
****************************************/
static char *
my_strlwr(char *str)
{
    char *p = str;

    while (*p) {
	if (isupper(*p)) {
	    *p = tolower(*p);
	}
	p++;
    }
    return str;
}

/****************************************
  basename()

  ファイル名のノード以降を得る
****************************************/
char *
basename(char *fname)
{
    char *p;
    
    if ((p = strrchr(fname, PATH_SEP)) != NULL) fname = p + 1;
#ifdef PATH_SEP2
    if ((p = strrchr(fname, PATH_SEP2)) != NULL) fname = p + 1;
#endif
#ifdef PATH_SEP3
    if ((p = strrchr(fname, PATH_SEP3)) != NULL) fname = p + 1;
#endif
#ifdef PATH_EXT
    if ((p = strrchr(fname, PATH_EXT)) != NULL) *p = '\0';
#endif
    return my_strlwr(fname);
}

/****************************************
  安全装置つきメモリ取得
****************************************/
char *
xmalloc(size_t len)
{
    char *p;

    p = malloc(len);
    if (p == NULL) {
	fprintf(stderr, "%s: %s\n", progname, strerror(errno));
	exit(EXIT_FAILURE);
    }
    return p;
}
